package pharao.client.dto;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import net.sf.hibernate4gwt.pojo.gwt.LazyGwtPojo;

public class OrtStatusDTO extends LazyGwtPojo {

	/**
	 * 
	 */
	private static final long serialVersionUID = 6129964283078723236L;

	/**
	 * ist der Ort schon freigeschaltet
	 */
	private boolean enabled = false;

	/**
	 * enthält alle bisher gerechneten Aufgaben
	 */
	private List listAufgabeStatus = new ArrayList();

	/**
	 * enthält den Ort zur dem der Status gehört
	 */
	private OrtDTO ortDTO;

	/**
	 * enthält den User-Status zu dem der Ort-Status gehört
	 */
	private UserStatusDTO userStatusDTO;

	/**
	 * wurde der Ort schon besucht
	 */
	private boolean visited = false;
	
	/**
	 * enthält den Status aller abgelegten Prüfungen
	 */
	private List listExamenStatusDTO = new ArrayList();

	public OrtStatusDTO() {
		// TODO Auto-generated constructor stub
	}

	/**
	 * fügt einen neuen Aufgabestatus zur liste hinzu
	 */
	public void addAufgabenStatusDTO(AufgabenStatusDTO aufgabenStatusDTO) {
		listAufgabeStatus.add(aufgabenStatusDTO);
	}
	
	/**
	 * fügt einen ExamenStatusDTO zur Liste hinzu
	 */
	public void addExamenStatusDTO(ExamenStatusDTO examenStatusDTO) {
		getListExamenStatusDTO().add(examenStatusDTO);
	}
	
	/**
	 * liefert die Anzahl der Falsch gelösten Aufgaben
	 */
	public int getCountOfFalsed(int aufgabenTyp, int difficulty) {
		int count = 0;

		Iterator iterator = getListAufgabeStatus().iterator();
		while (iterator.hasNext()) {
			AufgabenStatusDTO aufgabenStatusDTO = (AufgabenStatusDTO) iterator
					.next();

			if ((aufgabenStatusDTO.getAufgabenTyp() == aufgabenTyp)
					&& (aufgabenStatusDTO.getDifficulty() == difficulty)
					&& (aufgabenStatusDTO.isPassed() == false)) {
				count++;
			}
		}

		return count;
	}

	/**
	 * liefert die Anzahl der Richtig gelösten Aufgaben
	 */
	public int getCountOfPassed(int aufgabenTyp, int difficulty) {
		int count = 0;

		Iterator iterator = getListAufgabeStatus().iterator();
		while (iterator.hasNext()) {
			AufgabenStatusDTO aufgabenStatusDTO = (AufgabenStatusDTO) iterator
					.next();

			if ((aufgabenStatusDTO.getAufgabenTyp() == aufgabenTyp)
					&& (aufgabenStatusDTO.getDifficulty() == difficulty)
					&& (aufgabenStatusDTO.isPassed() == true)) {
				count++;
			}
		}

		return count;
	}

	/**
	 * liefert die Anzahl der gerechnetet Aufgaben
	 * 
	 * @param aufgabenTyp
	 * @param difficulty
	 * @return
	 */
	public int getCountOfTyp(int aufgabenTyp, int difficulty) {

		int count = 0;

		Iterator iterator = getListAufgabeStatus().iterator();
		while (iterator.hasNext()) {
			AufgabenStatusDTO aufgabenStatusDTO = (AufgabenStatusDTO) iterator
					.next();

			if ((aufgabenStatusDTO.getAufgabenTyp() == aufgabenTyp)
					&& (aufgabenStatusDTO.getDifficulty() == difficulty)) {
				count++;
			}

		}

		return count;
	}

	public List getListAufgabeStatus() {
		return listAufgabeStatus;
	}

	public OrtDTO getOrtDTO() {
		return ortDTO;
	}

	public UserStatusDTO getUserStatusDTO() {
		return userStatusDTO;
	}

	public boolean isEnabled() {
		return enabled;
	}

	public boolean isVisited() {
		return visited;
	}

	public void setEnabled(boolean enabled) {
		this.enabled = enabled;
	}

	public void setListAufgabeStatus(List listAufgabeStatus) {
		this.listAufgabeStatus = listAufgabeStatus;
	}

	public void setOrtDTO(OrtDTO ortDTO) {
		this.ortDTO = ortDTO;
	}

	public void setUserStatusDTO(UserStatusDTO userStatusDTO) {
		this.userStatusDTO = userStatusDTO;
	}

	public void setVisited(boolean visited) {
		this.visited = visited;
	}

	public List getListExamenStatusDTO() {
		return listExamenStatusDTO;
	}

	public void setListExamenStatusDTO(List listExamenStatusDTO) {
		this.listExamenStatusDTO = listExamenStatusDTO;
	}
}
